[Scia Reto](https://sciareto.org) mind map   
> __version__=`1.1`,generatorId=`com.igormaznitsa:idea-mindmap:intellij-2022.33.0-IntelliJ IDEA`
---

# 存储器
> align=`left`


## 寄存器
> align=`left`


### 位于CPU中
> align=`left`


### 读写速度最快，容量最小
> align=`left`


### 长度决定了计算机的运算能力（16位机、32位机和64位机）
> align=`left`


## Cache
> align=`left`


### 位于CPU和主存之间，解决CPU与内存之间速度容量不匹配问题（冯诺依曼瓶颈）<br/>通常设置多级缓存以提高命中率（L1、L2、L3）<br/>对开发人员透明（无法对其进行调度）
> align=`left`


### 读写速度最快，容量较小
> align=`left`


### 由SRAM（相联存储器）组成，特点为按内容存取，适合数据的检索与更新
> align=`left`


### 与内存的交互完全由硬件实现
> align=`left`


### Cache的内容是对内存内容的直接复制

### 使用Cache改善系统性能的依据是局部性原理
> align=`left`


#### 时间局部性<br/>被引用过一次的存储器位置在未来会被多次引用<br/>主要体现是循环
> align=`left`


#### 空间局部性<br/>如果一个存储器的位置被引用，那么将来它附近的位置也有可能被引用<br/>主要体现是顺序执行的过程
> align=`left`


### 地址映像方法

#### 内存的调度单位为块（页），一个页或者块由多个比特位组成<br/>Cache映射内存数据时也是按块进行的
> align=`left`


#### 直接相联映像

##### 描述：主存的块与Cache块的对应关系时固定的

##### 优点：硬件电路设计、地址变化比较简单

##### 缺点：冲突率较高、灵活性差

#### 全相联映像

##### 描述：主存与Cache均分成相同大小的块，允许主存的<br/>任何一块可以调入Cache存储器的任何一个块的空间中

##### 优点：冲突率较低、主存的块调入Cache的位置不受限制，非常灵活

##### 缺点：<br/>1\. 电路设计复杂难以实现，只适用于小容量的Cache<br/>2\. 无法从主块号中直接获得Cache的块号，变换比较复杂，速度比较慢
> align=`left`


#### 组相联映像
> align=`left`


##### 描述：<br/>将Cache中的块再分组，组采用直接映像方式，块采用全相联映像方式。<br/>即主存任何区的0组只能存到Cache的0组中，1组只能存到Cache的1组中依此类推。<br/>组内的块则采用全相联映像，即一组内的块可以任意存放。<br/>即主存一组中的任意一块可以存入Cache相应组的任意一块中。
> align=`left`


##### 优缺点：直接相联与全相联的折中

### Cache替换算法<br/>（页面淘汰算法）

#### 随机替换法 RAND（Random）

##### 随机挑选一个块进行淘汰

#### 先进先出算法 FIFO（First In，First out）

##### 淘汰当前缓存中最先进入的块

#### 近期最久未使用算法 LRU（Least Recently Used）

##### 淘汰近期内最久未被使用的块

#### 最不频繁使用算法 LFU（Least Frequently Used）

##### 淘汰近期内最少使用的块

##### 需要使用计数器，实现较困难

#### 优化替换法

### Cache的读写过程

#### 必要性：CPU对数据进行加工后，可能会导致Cache与内存数据不一致，Cache的读写就是为了解决这一问题

#### 写直达

##### 同时写入Cache与内存

##### 效率慢，损耗大，容易产生数据不一致

#### 写回

##### 只写Cache，淘汰块时，写回内存

##### 效率优于写直达，损耗较小

#### 标记法

##### 只写内存，并将Cache清空（将标志位清零），若再次用到此数据只需要再次从内存调取

## 内存（主存）
> align=`left`


### RAM

#### 位于主板上
> align=`left`


#### 读写速度较慢，容量较大
> align=`left`


#### 由DRAM（随机存储器）组成
> align=`left`


#### 与外存的交互由软件和硬件实现
> align=`left`


#### 数据断电后丢失

## 外存（辅存）
> align=`left`


### 一般由外设组成
> align=`left`


### 读写速度最慢，容量最大
> align=`left`


### CPU不能直接访问

### 外设
> align=`left`


#### 磁盘
> align=`left`


##### 机械硬盘

###### 组成单位

####### 柱面

####### 磁道

######## 从外向内进行编号

####### 扇区

######## 顺时针进行编号

####### 盘面

######## 从上向下进行编号

###### 调度

####### 旋转调度

######## 磁盘的旋转运动

####### 移臂调度

######## 机械臂控制磁头沿半径方向的直线运动

####### 调度规律

######## 先进性移臂调度，在进行旋转调度

######## 在访问不同磁道的信息时，需要进行移臂调度

######## 在访问不同扇区的信息时，需要进行旋转调度

###### 存取时间

####### 计算方式：存取时间 = 寻道时间 \+ 等待时间

####### 寻道时间：指磁头移动到磁道所需要的时间

####### 等待时间：等待读写的扇区转到磁头下方所用的时间

####### 一般来说，寻道事件大于等待时间

##### 固态硬盘

###### 由存储芯片组成，没有机械组件

###### 芯片类型

####### 闪存芯片

####### DRAM颗粒

###### 优点：无机械结构，读写速度快

###### 缺点：芯片有写入次数上限

#### 磁带
> align=`left`


#### 光盘
> align=`left`


#### U盘
> align=`left`

